knitr::opts_chunk$set(echo = FALSE) knitr::knit_hooks$set(inline = function(x) { prettyNum(x, big.mark=".", decimal.mark = ",")}) library(dplyr) library(keras) library(knitr) library(kableExtra)
r params$model_nyt
test_word <- params$test_word test_word_class <- params$test_word_class index_target_test <- params$index_target_test num_target_test <- params$num_target_test model_history <- params$model_history # henter model model_sti <- paste0(getwd(), "/data/") # henfør til pakke sti model <- keras::load_model_hdf5(paste0(model_sti, "model.h5")) # scorer test data test_scores <- model %>% predict(list(test_word, test_word_class)) test_scores_index <- test_scores[[1]] test_scores_number <- test_scores[[2]] # evaluerer model samlet # test_data_evaluation <- model %>% # evaluate(list(test_word, test_word_class), # list(index_target_test, num_target_test)) # evaluerer accuaracy på antallet af kommaer eval_number_acc <- data.frame(label = num_target_test, pred = pmax(round(test_scores_number), 0)) eval_number_acc$corret_classified <- eval_number_acc$label == eval_number_acc$pred comma_index_pred <- matrix(0, nrow(test_scores_index), ncol(test_scores_index)) comma_index_pred <- asplit(comma_index_pred, 1) comma_pos <- mapply(x = asplit(test_scores_index, 1), y = eval_number_acc$pred, function(x, y) { if (y > 0) doBy::which.maxn(x, y) else 0 } ) comma_index_pred <- mapply(x = comma_index_pred, y = comma_pos, function(x, y) {x[y] <- 1; return(x)}, SIMPLIFY = FALSE) comma_index_target <- asplit(index_target_test, 1) acc <- mapply(x = comma_index_pred, y = comma_index_target, function(x, y) { all(x == y) })
Modellen er testet på r nrow(eval_number_acc)
sætninger. I r round(prop.table(table(acc)), 3)[[2]] * 100
% af sætningerne bliver kommaet sat korrekt og modellen identificerer det rigtige antal kommaer i r round(prop.table(table(eval_number_acc$corret_classified)), 3)[[2]] * 100
% af sætningerne.
Baseline for modellen kan findes ved at se på den procenvise fordeling af kommaer og altid gætte på det antal kommaer, som er mest normalt. Hvis det mest normale antal kommaer i en sætning eksempelvis er 0, og det fremgår i 60 % af alle sætninger, så vil baseline sandsynligheden være 60 %. Her er vist fordelingen af antallet af kommaer i testdata.
kable(t(round(prop.table(table(num_target_test)), 3)), format = "latex") %>% kable_styling(position = "center")
En anden type baseline er den menneskelige. I hvor høj en andel vil et menneste kunne sætte det korrekte antal kommaer. Svaret er nok 100 %, eller meget tæt på (givet man forstår de danske kommaregler).
Nedenfor er modellens accuaracy vist fordelt på antallet af kommaer i hver sætning.
kable(round(prop.table(table(acc, num_target_test), margin = 2), 3), format = "latex") %>% kable_styling(position = "center")
Hvis der ses på antallet af prædikterede kommaer i forhold til hvor mange kommaer der faktisk er i en sætning, så viser diagonalen i nedenstående tabeller hvor stort et antal og hvor høj en accuracy der er inden for hvert antal komma. Dvs. at her kan ses hvor mange og hvor højt et træf der er i sætninger med ingen (0) komma, 1 komma, 2 kommaer osv. Til højre for diagonalen ses de tilfælde, hvor der er prædikteret flere kommaer end det korrekte og til venstre de tilfælde hvor der er prædikteret færre.
tbl_1 <- table(eval_number_acc$label, eval_number_acc$pred) tbl_2 <- prop.table(table(eval_number_acc$label, eval_number_acc$pred), margin = 1) kable(tbl_1, format = "latex") %>% kable_styling(position = "center") kable(tbl_2, digits = 3, format = "latex") %>% kable_styling(position = "center") #cat(c("\\begin{table}[!htb] # \\begin{minipage}{.5\\linewidth} # \\caption{} # \\centering", # kable(tbl_1, format = "latex"), # "\\end{minipage}% # \\begin{minipage}{.5\\linewidth} # \\centering # \\caption{}", # kable(tbl_2, digits = 3, format = "latex"), # "\\end{minipage} #\\end{table}" #))
\newpage
Modellen er trænet på r format(model_history$params$samples)
sætninger, med batch size r model_history$params$batch_size
og r model_history$params$epochs
epochs. I plottet kan træningsforløbet ses.
plot(model_history)
\newpage
summary(model)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.